package com.ruihu.admin.module.business.stat.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import javafx.beans.binding.ObjectExpression;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
@Component
public interface StatDao extends BaseMapper {

    /**
     * 根据日期统计电芯拆解数量
     * @param beginDate
     * @param endDate
     * @return
     */
    Integer countDisassembleElectricCore(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    /**
     * 根据日期统计电芯拆解合格数量
     * @param beginDate
     * @param endDate
     * @return
     */
    Integer countEligibleDisassembleElectricCore(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);


    /**
     * 按日期分组统计电芯拆解数
     * @param beginDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> groupCountDisassembleElectricCore(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    /**
     * 按日期分组统计电芯不良数
     * @param beginDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> groupCountIneligibleDisassembleElectricCore(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    /**
     * 根据电芯型号分组统计
     * @param beginDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> countElectricCoreByType(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    /**
     * 根据缺陷种类分组统计
     * @param beginDate
     * @param endDate
     * @param defectTypeIdList
     * @return
     */
    List<Map<String, Object>> countElectricCoreByDefectType(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate, @Param("defectTypeIdList") List<Long> defectTypeIdList);

    /**
     * 分组统计TOP 5的缺陷类型
     * @param beginDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> countTop5DefectType(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    /**
     * 统计缺陷类型总数
     * @param beginDate
     * @param endDate
     * @return
     */
    Integer countDefectType(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
}
